package edu.nf.dbutil.result;

import edu.nf.dbutil.ResultSetHandler;
import edu.nf.dbutil.RowProcessor;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 查询单列的值
 * @author yang
 * @date 2024-05-08
 */
public class ColumnHandler<T> implements ResultSetHandler<T> {
    /**
     * 列的下标
     */
    private Integer columnIndex;
    /**
     * 列名
     */
    private String columnName;

    public ColumnHandler(Integer columnIndex) {
        this.columnIndex = columnIndex;
    }

    public ColumnHandler(String columnName) {
        this.columnName = columnName;
    }

    /**
     * 根据 列名 或 下标 查询参数
     * @param rs 结果集对象
     * @return
     * @throws SQLException
     * 根据实例化对象时的构造函数，判断查询参数的条件时列名或者下标，
     * 通过自定义的 RowProcessor.toValue() 方法，返回 T 类型的数据
     */
    @Override
    public T handle(ResultSet rs) throws SQLException {
        if(rs.next()){
            if (this.columnIndex == null){
                return (T)RowProcessor.toValue(rs, columnName);
            }
            return (T)RowProcessor.toValue(rs, columnIndex);
        }
        return null;
    }
}
